﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;

using XCode;
using BingZi.HY.Core;

namespace BingZi.HY.Core
{

    /// <summary>用户表</summary>
    [ModelCheckMode(ModelCheckModes.CheckTableWhenFirstUse)]
    public class sys_UserTable : sys_UserTable<sys_UserTable> { }

    /// <summary>用户表</summary>
    public partial class sys_UserTable<TEntity> : Entity<TEntity> where TEntity : sys_UserTable<TEntity>, new()
	{
		#region 对象操作
		//基类Entity中包含三个对象操作：Insert、Update、Delete
		//你可以重载它们，以改变它们的行为
		//如：
		/*
		/// <summary>
		/// 已重载。把该对象插入到数据库。这里可以做数据插入前的检查
		/// </summary>
		/// <returns>影响的行数</returns>
		public override Int32 Insert()
		{
			return base.Insert();
		}
		 * */
		#endregion
		
		#region 扩展属性
		// 本类与哪些类有关联，可以在这里放置一个属性，使用延迟加载的方式获取关联对象

		/*
		private Category _Category;
		/// <summary>该商品所对应的类别</summary>
        [XmlIgnore]
		public Category Category
		{
			get
			{
				if (_Category == null && CategoryID > 0 && !Dirtys.ContainsKey("Category"))
				{
					_Category = Category.FindByKey(CategoryID);
					Dirtys.Add("Category", true);
				}
				return _Category;
			}
			set { _Category = value; }
		}
		 * */
		#endregion

		#region 扩展查询

        /// <summary>
        /// 根据用户名查找
        /// </summary>
        /// <param name="UserName">用户名</param>
        /// <returns></returns>
        public static TEntity FindByUserName(String UserName)
        {
            return Find(_.U_LoginName, UserName.Trim());
        }

        /// <summary>
        /// 根据email查找
        /// </summary>
        /// <param name="UserName">用户名</param>
        /// <returns></returns>
        public static TEntity FindByEmail(String Email)
        {
            return Find(_.U_Email, Email.Trim());
        }

        /// <summary>
        /// 根据用户名查找
        /// </summary>
        /// <param name="UserName">用户名</param>
        /// <returns></returns>
        public static String FindUserNameByID(Int32 UserID)
        {
            TEntity u = FindByKeyForEdit(UserID);
            return u != null && u.UserID > 0 ? u._U_LoginName : String.Empty;
        }


		#endregion
        #region 高级查询

        #endregion

        #region 扩展操作
        /// <summary>
        /// 已重载。基类先调用Valid(true)验证数据，然后在事务保护内调用OnInsert
        /// </summary>
        /// <returns></returns>
        public override Int32 Insert()
        {
            Int32 rResult = base.Insert();

 


            return rResult;
        }

        ///// <summary>
        ///// 已重载。在事务保护范围内处理业务，位于Valid之后
        ///// </summary>
        ///// <returns></returns>
        //protected override Int32 OnInsert()
        //{
        //    return base.OnInsert();
        //}

        ///// <summary>
        ///// 验证数据，通过抛出异常的方式提示验证失败。
        ///// </summary>
        ///// <param name="isNew"></param>
        //public override void Valid(Boolean isNew)
        //{
        //    // 建议先调用基类方法，基类方法会对唯一索引的数据进行验证
        //    base.Valid(isNew);

        //    // 这里验证参数范围，建议抛出参数异常，指定参数名，前端用户界面可以捕获参数异常并聚焦到对应的参数输入框
        //    if (String.IsNullOrEmpty(_.Name)) throw new ArgumentNullException(_.Name, _.Name.Description + "无效！");
        //    if (!isNew && ID < 1) throw new ArgumentOutOfRangeException(_.ID, _.ID.Description + "必须大于0！");

        //    // 在新插入数据或者修改了指定字段时进行唯一性验证，CheckExist内部抛出参数异常
        //    if (isNew || Dirtys[_.Name]) CheckExist(_.Name);
        //    if (isNew || Dirtys[_.Name] || Dirtys[_.DbType]) CheckExist(_.Name, _.DbType);
        //    if ((isNew || Dirtys[_.Name]) && Exist(_.Name)) throw new ArgumentException(_.Name, "值为" + Name + "的" + _.Name.Description + "已存在！");
        //}
        #endregion

        #region 业务
        #endregion
    }
}